/*
 * @(#)XfdmSystemStyle.java        1.0 2000/05/09
 *
 * This file is part of Xfuzzy 3.0, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfdm.model;

/**
 * Configuraci�n del estilo del sistema
 * 
 * @author Francisco Jos� Moreno Velo
 *
 */
public class XfdmSystemStyle {

	//----------------------------------------------------------------------------//
	//                           CONSTANTES P�BLICAS                              //
	//----------------------------------------------------------------------------//

	/**
	 * C�digo de la asignaci�n del m�nimo como operador de conjunci�n 
	 */
	public static final int MIN = 0;
	
	/**
	 * C�digo de la asignaci�n del producto como operador de conjunci�n
	 */
	public static final int PROD = 1;

	/**
	 * C�digo de la asignaci�n de la media difusa como operador de concreci�n
	 */
	public static final int FUZZYMEAN = 0;
	
	/**
	 * C�digo de la asignaci�n de la media difusa ponderada como operador de concreci�n
	 */
	public static final int WEIGHTED = 1;
	
	/**
	 * C�digo de la asignaci�n del modelo Takagi-Sugeno como operador de concreci�n
	 */
	public static final int TAKAGI = 2;
	
	/**
	 * C�digo de la asignaci�n de la etiqueta m�xima como operador de concreci�n
	 */
	public static final int CLASSIFICATION = 3;

	//----------------------------------------------------------------------------//
	//                            MIEMBROS PRIVADOS                               //
	//----------------------------------------------------------------------------//

	/**
	 * Nombre de la base de conocimiento a crear
	 */
	private String knowledgebase;
		
	/**
	 * Asignaci�n del operador de conjunci�n (MIN o PROD)
	 */
	private int conjunction;
	
	/**
	 * Asignaci�n del operador de concreci�n
	 */
	private int defuz;
	
	/**
	 * Marcador para indicar que hay que crear el sistema completo
	 */
	private boolean creation;

	//----------------------------------------------------------------------------//
	//                                CONSTRUCTOR                                 //
	//----------------------------------------------------------------------------//

	/**
	 * Constructor por defecto
	 */
	public XfdmSystemStyle() {
		this.knowledgebase = "global";
		this.conjunction = 0;
		this.defuz = 0;
		this.creation = false;
	}

	/**
	 * Constructor completo
	 */
	public XfdmSystemStyle(String name, int conj, int defuz, boolean creation) {
		this.knowledgebase = name;
		this.conjunction = conj;
		this.defuz = defuz;
		this.creation = creation;
	}

	/**
	 * Obtiene un duplicado
	 */
	public XfdmSystemStyle(XfdmSystemStyle syst) {
		this();
		if(syst == null) return;
		this.knowledgebase = new String(syst.knowledgebase);
		this.conjunction = syst.conjunction;
		this.defuz = syst.defuz;
		this.creation = syst.creation;
	}

	//----------------------------------------------------------------------------//
	//                             M�TODOS P�BLICOS                               //
	//----------------------------------------------------------------------------//

	/**
	 * Representaci�n en el fichero de configuraci�n
	 */
	public String toXML() {
		String code = "\t\t<system base=\""+knowledgebase+"\" ";
		code += " and=\""+conjunction+"\" defuz=\""+defuz+"\" creation=\""+creation+"\">";
		code += "</system>";
		return code;
	}

	/**
	 * Obtiene el nombre de la base de conocimiento a crear
	 * @return
	 */
	public String getKnowledgeBase() {
		return this.knowledgebase;
	}
	
	/**
	 * Asigna el nombre de la base de conocimiento a crear
	 * @param name
	 */
	public void setKnowledgeBase(String name) {
		this.knowledgebase = name;
	}
	
	/**
	 * Obtiene el c�digo del operador And seleccionado
	 * @return
	 */
	public int getAndOperator() {
		return this.conjunction;
	}
	
	/**
	 * Asigna el c�digo del operador And seleccionado
	 * @param op
	 */
	public void setAndOperator(int op) {
		this.conjunction = op;
	}
	
	/**
	 * Obtiene el c�digo del m�todo de concreci�n
	 * @return
	 */
	public int getDefuzMethod() {
		return this.defuz;
	}

	/**
	 * Asigna el c�digo del m�todo de concreci�n
	 * @param defuz
	 */
	public void setDefuzMethod(int defuz) {
		this.defuz = defuz;
	}
	
	/**
	 * Indica si hay que crear el sistema completo o s�lo la base de conocimiento
	 * @return
	 */
	public boolean createSystem() {
		return this.creation;
	}
	
	/**
	 * Asigna el marcador de creaci�n del sistema completo
	 * @param c
	 */
	public void setCreationCondition(boolean c) {
		this.creation = c;
	}
}
